home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 22 / Cream of the Crop 22.iso / program / asm32.zip / STARTCW.ASM < prev    next >
Assembly Source File  |  1995-11-28  |  2KB  |  115 lines

  1. ; STARTCW.ASM for ASM32CW - Copyright (C) 1994, 1995 Douglas Herr
  2. ;  all rights reserved
  3.  
  4. include    model.inc
  5.  
  6. IFNDEF    NEARMODEL
  7. ;
  8. ; define stack for all models except NEAR
  9. ;
  10. IFNDEF    STACKSIZE
  11. STACKSIZE    equ    2048
  12. ENDIF
  13.  
  14. .stack    STACKSIZE
  15. ENDIF
  16.  
  17. ;
  18. ; tell WL32 which library to use
  19. ;
  20. IFDEF    NEARMODEL
  21. includelib    asm32cw
  22. ENDIF
  23. IFDEF    SMALLMODEL
  24. includelib    asm32cws
  25. ENDIF
  26. IFDEF    FLATMODEL
  27. includelib    asm32cwf
  28. ENDIF
  29.  
  30. ;
  31. ; public symbols
  32. ;
  33. public    $pspsel, $xferseg
  34. public    zero_sel
  35. IFDEF    SMALLMODEL
  36. public    alias_code_sel
  37. ENDIF
  38.  
  39. extrn    main32:near
  40.  
  41. include    dataseg.inc
  42.  
  43. zero_sel    dw ?        ; 4G selector for linear address 0000:0000
  44. psp_sel        dw ?        ; 100h selector for PSP segment
  45. xfer_buffer    dd ?        ; size of transfer buffer (always < 64k)
  46. xfer_seg    dw ?        ; real-mode segment address of transfer buffer
  47. xfer_sel    dw ?        ; selector of transfer buffer
  48. xfer_offset    dd ?        ; offset of transfer buffer
  49. system_flags    dd ?        ; CW extender flags
  50. IFDEF    SMALLMODEL
  51. alias_code_sel    dw ?
  52. ENDIF
  53. @curseg    ends
  54.  
  55. include    codeseg.inc
  56.  
  57. start:
  58. ;
  59. ; set up selectors except SS, CS
  60. ;
  61. IFDEF    NEARMODEL
  62.     mov    ax,_NEAR
  63. ELSE
  64.     mov    ax,@data
  65. ENDIF
  66.     mov    ds,ax
  67.     mov    es,ax
  68.     mov    fs,ax
  69.     mov    gs,ax
  70.  
  71.     call    get_system_data        ; initialize ZERO_SEL, PSP_SEL, etc
  72.     call    main32
  73.  
  74.     mov    ax,4C00h
  75.     int    21h
  76.  
  77. ;
  78. ; get CW-ASM system data using CW API
  79. ;
  80.  
  81. $pspsel:
  82.     mov    ax,psp_sel
  83.     ret
  84.  
  85. $xferseg:
  86.     mov    bx,xfer_seg    ; real-mode segment address of buffer
  87.     mov    eax,xfer_offset
  88.     mov    ecx,xfer_buffer    ; size of transfer buffer
  89.     ret
  90.  
  91. get_system_data:
  92.     pushad
  93.     push    es
  94.  
  95.     sys    info        ; API function to get CW extender data
  96.     mov    zero_sel,ax
  97.     mov    psp_sel,bx
  98.     mov    xfer_buffer,ecx
  99.     mov    xfer_seg,dx
  100.     mov    xfer_offset,esi
  101.     mov    xfer_sel,es
  102.     mov    system_flags,edi
  103. IFDEF    SMALLMODEL
  104.     mov    bx,cs
  105.     sys    AliasSel
  106.     mov    alias_code_sel,ax
  107. ENDIF
  108.     pop    es
  109.     popad
  110. exit:
  111.     ret
  112.  
  113. @curseg    ends
  114.     end    start
  115.